今天是第 7 天,想來整理並跟大家分享實作水平置中與垂直置中的方法~~
在父元素設定 text-align: center;
,目標元素(子元素)就會套用到水平置中
在元素本身設定 margin: 0 auto;
display: inline-block;
,父元素設定 text-align: center;
display: flex;
、justify-content: center;
line-height
等於目標元素的高度或是字體大小display: inline-block;
、vertical-align: middle;
、line-height: 1;
,並在 div 的外層設定 line-height
來代替高度/* 單行 */
.container6 {
height: 70px;
}
.container6 span {
line-height: 70px;
}
/* 多行 */
.container7 {
line-height: 200px; /* 替代 height */
}
.container7 div {
display: inline-block;
vertical-align: middle;
line-height: 1;
}
flex
父元素設定 display: flex;
、 align-items: center
table
父元素設定 display: table;
,子元素設定 display: table-cell;
、vertical-align: middle;
padding
目標元素設定 padding-right
、padding-left
一樣距離大小
::before + inline-block
在父元素新增偽元素 ::before
,此偽元素 height: 100%;
,並與子元素同時設定 display: inline-block;
、vertical-align: middle;
.container11::before {
content: "";
height: 100%;
display: inline-block;
vertical-align: middle;
}
.container11 span {
display: inline-block;
vertical-align: middle;
}
上圖可以看到 ::before 高度設為 100%,撐起整個容器後,便可以使用 display: inline-block;
與 vertical-align: middle;
來讓右邊元素對齊
flex
父元素設定 display: flex;
、 align-items: center;
position + transform
目標元素設定 position: absolute;
、top: 50%;
,再調整本身位置 transform: translateY(-50%);
,適用於單一 block 元素
.container13 {
height: 70px;
position: relative;
}
.container13 div {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
position: absolute;
、top: 0;
、bottom: 0;
,margin: auto;
,適用於單一 block 元素.container14 {
height: 70px;
position: relative;
}
.container14 div {
height: 30px;
position: absolute;
top: 0;
bottom: 0;
margin: auto;
}
padding
父元素設定 padding-top
、padding-bottom
一樣距離大小
::before + inline-block
與上述 Inline 元素、Inline-* 元素方法相同,但只適用於單行
其他實作請至 Codepen
以上這些是我選擇好記的置中方法,還想知道其他方法請至參考資料
參考資料:
CSS-TRICKS - Centering in CSS: A Complete Guide
PJCHENder - [CSS] 垂直置中的方法
CSS 垂直居中的七種方法
CSS可樂 - CSS垂直置中技巧,我只會23個,你會幾個文章同步更新於 medium